//////////////////////////////////////////////////////////////////////
//  Jack McCaffery
//  11-10-2014
//////////////////////////////////////////////////////////////////////

#pragma once

#include "topicModel/fixedParameters.H"
#include "topicModel/parameterGroup.H"


/// \brief Class for unconstrained model paramters
///	   SC is the scalar type of the data
template <class SC>
class GeneralParameters : public ParameterGroup<SC>
{
public:
	~GeneralParameters ();
	GeneralParameters ();

	/// \brief Apply a gradient with a rate parameter
	/// \param gradient_ The gradient to apply. Dimensions must
	///	   match the dimensions of data
	/// \param rate_ A rate that controls the magnitude of the gradient
	void applyGradient (FixedParameters<SC> const &gradient_, double rate_);
};



